const BASE_URL = 'http://localhost:8188' // 替换为你的后端接口地址

function request(options) {
  return new Promise((resolve, reject) => {
    const token = uni.getStorageSync('token')
    
    // 处理GET请求的参数
    let url = BASE_URL + options.url
    if (options.params) {
      const queryString = Object.keys(options.params)
        .filter(key => options.params[key] !== undefined && options.params[key] !== null)
        .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(options.params[key])}`)
        .join('&')
      
      if (queryString) {
        url += (url.includes('?') ? '&' : '?') + queryString
      }
    }

    // 处理请求头
    const headers = {
      'Content-Type': options.headers?.['Content-Type'] || 'application/json',
      'Authorization': token ? `Bearer ${token}` : ''
    }

    // 处理请求数据
    let data = options.data
    if (headers['Content-Type'] === 'application/x-www-form-urlencoded') {
      // 如果已经是字符串格式，直接使用
      if (typeof data === 'string') {
        // 不做处理
      } 
      // 如果是对象，转换为表单格式
      else if (typeof data === 'object') {
        data = Object.keys(data)
          .filter(key => data[key] !== undefined && data[key] !== null)
          .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`)
          .join('&')
      }
    } else if (headers['Content-Type'] === 'application/json' && typeof data === 'object') {
      data = JSON.stringify(data)
    }
    
    uni.request({
      url: url,
      method: options.method || 'GET',
      data: data,
      header: headers,
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else if (res.statusCode === 401) {
          // token过期或未登录
          uni.removeStorageSync('token')
          uni.removeStorageSync('userInfo')
          
          // 跳转到登录页
          uni.navigateTo({
            url: '/pages/login/login'
          })
          
          reject(new Error('请先登录'))
        } else {
          reject(new Error(res.data.message || '请求失败'))
        }
      },
      fail: (err) => {
        console.error('请求失败:', err)
        reject(new Error('网络请求失败'))
      }
    })
  })
}

// 添加默认配置
request.defaults = {
  baseURL: BASE_URL
}

export default request 